home *** CD-ROM | disk | FTP | other *** search
-
- /*
- ** File: fast.c
- */
-
- #define Entry(M1,M2,i,j) (M1).T[0][j]*(M2).T[i][0] + \
- (M1).T[1][j]*(M2).T[i][1] + \
- (M1).T[2][j]*(M2).T[i][2] + \
- (M1).T[3][j]*(M2).T[i][3]
- #define TxT4Dm(M,M1,M2) \
- (M).T[0][0] = Entry((M1),(M2),0,0); \
- (M).T[0][1] = Entry((M1),(M2),0,1); \
- (M).T[0][2] = Entry((M1),(M2),0,2); \
- (M).T[0][3] = Entry((M1),(M2),0,3); \
- \
- (M).T[1][0] = Entry((M1),(M2),1,0); \
- (M).T[1][1] = Entry((M1),(M2),1,1); \
- (M).T[1][2] = Entry((M1),(M2),1,2); \
- (M).T[1][3] = Entry((M1),(M2),1,3); \
- \
- (M).T[2][0] = Entry((M1),(M2),2,0); \
- (M).T[2][1] = Entry((M1),(M2),2,1); \
- (M).T[2][2] = Entry((M1),(M2),2,2); \
- (M).T[2][3] = Entry((M1),(M2),2,3); \
- \
- (M).T[3][0] = Entry((M1),(M2),3,0); \
- (M).T[3][1] = Entry((M1),(M2),3,1); \
- (M).T[3][2] = Entry((M1),(M2),3,2); \
- (M).T[3][3] = Entry((M1),(M2),3,3)
-
- #define EntryP(Q,M,i) \
- ((Q).P[0]*(M).T[i][0] + (Q).P[1]*(M).T[i][1] + \
- (Q).P[2]*(M).T[i][2] + (Q).P[3]*(M).T[i][3])
-
- #define PxT4Dm(Q1,Q2,M) \
- (Q1).P[0] = EntryP(Q2,M,0);\
- (Q1).P[1] = EntryP(Q2,M,1);\
- (Q1).P[2] = EntryP(Q2,M,2);\
- (Q1).P[3] = EntryP(Q2,M,3);
-
- #define RayxT4Dm(Rout,Rin,M) \
- PxT4Dm(Rout.P0,Rin.P0,M); \
- PxT4Dm(Rout.P1,Rin.P1,M);
-
-
-
-
-